// 购物车服务
import { createUserTrade } from './user';

// 购物车商品项
export interface CartItem {
  id: number;
  title: string;
  price: number;
  image: string;
  count: number;
  skuId?: number;
  skuName?: string;
}

// 购物车存储键名
const CART_STORAGE_KEY = 'mini_cart';

/**
 * 获取购物车数据
 */
export const getCartItems = (): CartItem[] => {
  const cartItems = wx.getStorageSync(CART_STORAGE_KEY) || [];
  return cartItems;
};

/**
 * 添加商品到购物车
 * @param item 
 */
export const addToCart = (item: CartItem): void => {
  let cartItems = getCartItems();
  
  // 查找是否已存在相同商品
  const existIndex = cartItems.findIndex(
    cartItem => cartItem.id === item.id && cartItem.skuId === item.skuId
  );

  if (existIndex > -1) {
    // 已存在则增加数量
    cartItems[existIndex].count += item.count;
  } else {
    // 不存在则添加
    cartItems.push(item);
  }

  // 保存到缓存
  wx.setStorageSync(CART_STORAGE_KEY, cartItems);

  // 显示提示
  wx.showToast({
    title: '已加入购物车',
    icon: 'success'
  });
};

/**
 * 从购物车移除商品
 * @param itemId 
 * @param skuId 
 */
export const removeFromCart = (itemId: number, skuId?: number): void => {
  let cartItems = getCartItems();
  
  cartItems = cartItems.filter(
    item => !(item.id === itemId && item.skuId === skuId)
  );
  
  wx.setStorageSync(CART_STORAGE_KEY, cartItems);
};

/**
 * 更新商品数量
 * @param itemId 
 * @param skuId 
 * @param count 
 */
export const updateItemCount = (itemId: number, count: number, skuId?: number): void => {
  let cartItems = getCartItems();
  
  const itemIndex = cartItems.findIndex(
    item => item.id === itemId && item.skuId === skuId
  );
  
  if (itemIndex > -1) {
    if (count <= 0) {
      // 如果数量小于等于0，则移除
      cartItems.splice(itemIndex, 1);
    } else {
      // 更新数量
      cartItems[itemIndex].count = count;
    }
    
    wx.setStorageSync(CART_STORAGE_KEY, cartItems);
  }
};

/**
 * 清空购物车
 */
export const clearCart = (): void => {
  wx.removeStorageSync(CART_STORAGE_KEY);
};

/**
 * 获取购物车商品总数
 */
export const getCartItemCount = (): number => {
  const cartItems = getCartItems();
  return cartItems.reduce((total, item) => total + item.count, 0);
};

/**
 * 获取购物车商品总价
 */
export const getCartTotalPrice = (): number => {
  const cartItems = getCartItems();
  return cartItems.reduce((total, item) => total + item.price * item.count, 0);
};

/**
 * 创建订单
 */
export const createOrder = async () => {
  const cartItems = getCartItems();
  
  if (cartItems.length === 0) {
    wx.showToast({
      title: '购物车为空',
      icon: 'none'
    });
    return null;
  }
  
  try {
    // 构建订单数据
    const orderData = {
      items: cartItems.map(item => ({
        productId: item.id,
        skuId: item.skuId,
        count: item.count,
        price: item.price
      })),
      totalAmount: getCartTotalPrice()
    };
    
    // 调用创建订单接口
    const res = await createUserTrade(orderData);
    
    if (res.code === 0) {
      // 创建成功，清空购物车
      clearCart();
      return res.data;
    }
    
    return null;
  } catch (error) {
    console.error('创建订单失败', error);
    wx.showToast({
      title: '创建订单失败',
      icon: 'none'
    });
    return null;
  }
}; 